<?php
/*
* 节点模型
*/
namespace App\Model;

use Think\Model\RelationModel;

class UserModel extends RelationModel{
	/**
	 * 用户注册
	 * @param $phone string 电话号码
	 * @param $codenum string 验证码
	 * @param $pass string 密码
	 * @return int 注册状态（0 注册失败 1 注册成功 2 号码已注册 3 验证码失效 4 验证码错误）
     */
	function uregister($phone, $codenum, $pass,$sign,$plat){
	    //验证手机号码
	    $pattern = "/^(1[3|5|8|4|7][0-9]|15[0|3|6|7|8|9]|18[8|9])\d{8}$/is"; 
	    preg_match($pattern,$phone,$arr);
	    if(empty($arr)){
	        return 5;//手机号码不符合
	    }

		$code_status = checkPhoneCode($phone,$codenum);
		switch($code_status){
			case 1:
				$where['phone'] = $phone;
				$info = $this->where($where)->find();
				if(empty($info)){
					$data = array(
						'phone' => $phone,
						'pass' => md5($pass),
						'createtime' => time(),
						'account' => 0.00,
						'time' => time(),
						'sign' => $sign,
						'plat' => $plat,
						'push_code' => time().rand(10000,99999)
					);
					$res = $this->add($data);
					if($res>0){
						return 1;//注册成功
					}else{
						return 0;//注册失败
					}
				}else{
					return 2;//该号码已注册
				}
				break;
			case 2:
				return 3;//验证码失效
				break;
			default:
				return 4;//验证码错误
		}
	}

	/**
	 * 用户登录
	 * @param $phone string 电话号码
	 * @param $pass string 密码
	 * @param $imei string 手机标识
	 * @return int 登录状态或用户ID（-1 用户不存在 -1 登录密码错误 $uinfo['u_id'] 登录成功返回用户ID）
     */
	function userlogin($phone, $pass, $imei, $plat){
		$map['phone'] = $phone;
		$uinfo = $this->where($map)->find();
		if(empty($uinfo)){
			return -1;//用户不存在
		}else{
			if($uinfo['pass'] == md5($pass)){
				$res = $this->changeImei($uinfo['id'], $imei, $plat);
				return $uinfo;
			}else{
				return -2;//登录密码有误
			}
		}
	}

	/**
	 * 登录标识更新
	 * @param int $uid 用户ID
	 * @param string $imei 手机标识
     */
	function changeImei($uid, $imei, $plat)
	{
		$map['id'] = $uid;
		$oImei = $this->where($map)->getField('sign');
		if($oImei == $imei){
			return true;
		}else{
			$oPlat = $this->where($map)->getField('plat');	// 获取推送设备平台
			$oCode = $this->where($map)->getField('push_code');		// 获取推送用户

			$data = array(
				'sign' => $imei,
				'plat' => $plat
			);
			$this->where($map)->save($data);

			// 推送消息
			$param = array(
				'alias' => $oCode,	// 推送用户
				'title' => '帐号在其他设备登录',
				'content' => '您的帐号已在其他设备上登录，如非本人操作请尽快修改密码',
				'data' => [
					'code' => 1
				]
			);
			JPushMessage($param);
		}
	}

	/**
	 * 忘记密码
	 * @param $phone string 电话号码
	 * @param $codenum string 验证码
	 * @param $pass string 新密码
	 * @return int 状态（0 密码修改失败 1 密码修改成功 2 验证码错误 3 验证码失效）
     */
	function uforgetpass($phone, $codenum, $pass){
		$status = checkPhoneCode($phone,$codenum);
		switch($status){
			case 1:
				$where['phone'] = $phone;
				$data = array(
					'pass' => md5($pass),
					'time' => time()
				);
				$res = $this->where($where)->save($data);
				if($res>0){
					return 1;//修改成功
				}else{
					return 0;//修改失败
				}
				break;
			case 2:
				return 3;//验证码失效
				break;
			default:
				return 2;//验证码错误
		}
	}

	/**
	 * 修改密码
	 * @param $uid int 用户ID
	 * @param $oldpass string 旧密码
	 * @param $newpass string 新密码
	 * @return int 状态（0 修改失败 1 修改成功 2 原密码错误）
     */
	function altuserpass($uid, $oldpass, $newpass){
		$map['id'] = $uid;
		$uinfo = $this->where($map)->find();
		if($uinfo['pass'] == md5($oldpass)){
			$data = array(
				'pass' => md5($newpass),
				'time' => time()
			);
			$res = $this->where($map)->save($data);
			if($res !== false){
				return 1;//修改成功
			}else{
				return 0;//修改失败
			}
		}else{
			return 2;//原密码错误
		}
	}

	/**
	 * 获取用户余额
	 * @param $user_id 用户ID
	 * @return mixed
     */
	function get_user_account($user_id)
	{
		$map_user['id'] = $user_id;
		$account = $this->where($map_user)->getField('account');
		return $account;
	}
}
?>